package sgpt.Beans.DAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import sgpt.Beans.Cidade;
import sgpt.Beans.Transporte;
import sgpt.Beans.DAO.interfaces.IcidadeDAO;
import sgpt.Beans.DAO.interfaces.ItransporteDAO;

public class TransporteDAO implements ItransporteDAO {
	
	private List<Transporte> transportes;
	private Statement db;
	private IcidadeDAO cidadeDAO;
	
	public TransporteDAO(Connection conn) {
		super();
		String sql = "create table transportes(id long,origemid long,destinoid long,vagas long,preco integer(2));";
		transportes = new ArrayList<Transporte>();
		cidadeDAO = JdbcDaoFactory.getInstance().getCidadeDAO();
		try {
			this.db = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("******* Erro ao criar Statement "+this.getClass().getSimpleName());
			System.out.println(e.getMessage());
		}
	}


	public List<Transporte> getTransportesPara(long destinoid) {
		String sql = "select * from transportes where destino_id="+destinoid;
		return getTransportesFromSQL(sql);
	}
	
	private List<Transporte> getTransportesFromSQL(String sql){
		List<Transporte> retTransportes = new ArrayList<Transporte>();
		Transporte transporte;
		try {
			ResultSet rs = db.executeQuery(sql);
			while (rs.next()){
				transporte = new Transporte();
				transporte.setID(rs.getLong(ConstantesDAO.id));
				transporte.setPreco(rs.getFloat(ConstantesDAO.preco));
				transporte.setVagas(rs.getInt(ConstantesDAO.vagas));
				transporte.setDestino(cidadeDAO.getCidadeByID(rs.getLong(ConstantesDAO.destino_id)));
				transporte.setOrigem(cidadeDAO.getCidadeByID(rs.getLong(ConstantesDAO.origem_id)));
				retTransportes.add(transporte);
			}
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("************** Erro ao consultar "+this.getClass().getSimpleName());
		}
		return retTransportes;
	}
	
	public Transporte insereTransporte(Transporte transporte) {
		String sql = "insert into transportes(NULL,origem_id,destino_id,vagas,preco) values("+
					 transporte.getOrigem().getID()+","+transporte.getDestino().getID()+","+transporte.getVagas()+","+
					 transporte.getPreco()+")";
					 
		try {
			db.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("******* Erro ao inserir em "+this.getClass().getSimpleName());
		}
		
		return null;
	}

	public List<Transporte> getTransportesPara(Cidade destino) {
		return getTransportesPara(destino.getID());
	}
	
	public List<Transporte> getTransportesDe(long origemid) {
		String sql = "SELECT * FROM transportes WHERE origem_id = "+origemid;
		return getTransportesFromSQL(sql);
	}
	
	public List<Transporte> getTransportesDe(Cidade origem) {
		return getTransportesDe(origem.getID());
	}


	public Transporte removeTransporte(Transporte transp) {
		// TODO Auto-generated method stub
		return null;
	}

	public Transporte updateTransporte(Transporte transp) {
		// TODO Auto-generated method stub
		return null;
	}

	public Transporte getTransporteById(long transporteid) {
		String sql = "SELECT * FROM transportes WHERE id="+transporteid+";";
		List<Transporte> transportes = getTransportesFromSQL(sql);
		return transportes.get(0);
	}
 
}
 
